package ru.pb.game.network.engine.client.packets.sendable;

import ru.pb.game.network.engine.client.packets.GameServerToClientPacket;
import ru.pb.game.objects.model.players.Player;
import ru.pb.game.objects.model.room.Room;

public class opcode_3587_ACK extends GameServerToClientPacket
{
	/**
	 * i3NetworkPacket__ReadData(a1, &v171, 4);
	 * if ( v171 >= 0 )
	 * {
	 * i3NetworkPacket__ReadData(a1, LODWORD(dword_A9AE78) + 876, 109);
	 * i3NetworkPacket__ReadData(a1, LODWORD(dword_A9AE78) + 985, 80);
	 * i3NetworkPacket__ReadData(a1, LODWORD(dword_A9AE78) + 1085, 20);
	 * i3NetworkPacket__ReadData(a1, LODWORD(dword_A9AE78) + 1065, 20);
	 * }
	 */
	private int _slot;

	public opcode_3587_ACK(int slot)
	{
		_slot = slot;
	}

	@Override
	public void writeImpl()
	{
		if(getPlayer().getRoom() != null && getPlayer().getRoom().getPlayerBySlot(_slot) != null) // TODO: переделать, некрасиво
		{
			Room r = getPlayer().getRoom();
			Player p = r.getPlayerBySlot(_slot);

			writeD(0); // если есть инфа или игрок?

			// инфа о персе
			// ===== i3NetworkPacket__ReadData(a2, &v302, 101); =====
			writeS(p.getName(), 33); // Имя перса
			writeD(p.getPlayerInfos().getExp()); // опыт
			writeD(p.getPlayerInfos().getRank()); // ранк (0-54)
			writeD(1); // Пока не понятно за чего отвечают пустые байты...
			writeD(p.getPlayerInfos().getGamePoint()); // ГП
			writeD(0); // Рублики

			writeB(new byte[13]); // Хз что это такое

			writeD(p.getPlayerInfos().getPcCafe()); // Какое то извещение....Оо PC_Cafe(0x02 - Премиум, 0x01 - Нормал, 0x00 - нет пс_кафе) =)
			writeH();

			// КланИнфа
			writeS(p.getClan().getName(), 16); // Clan name 16 символов =)
			writeC(); // что то типа разделителя между названием клана и его рангом
			writeH(p.getClan().getClanInfo().getClanRank()); // Ранг клана - 53 - max

			writeC(p.getClan().getClanInfo().getClanLogo().getLogo1()); // Лого1
			writeC(p.getClan().getClanInfo().getClanLogo().getLogo2()); // Лого2
			writeC(p.getClan().getClanInfo().getClanLogo().getLogo3()); // Лого3
			writeC(p.getClan().getClanInfo().getClanLogo().getLogo4()); // Лого4
			writeH(p.getClan().getClanInfo().getClanLogo().getLogoColor()); // цвет названия клана.
			writeD(); // Непонятно чо
			writeD(8670);
			writeD(1010000);
			// 110 --

			// ===== i3NetworkPacket__ReadData(a2, v113, 80); =====
			// НЕ СЕЗОН
			writeD(p.getPlayerInfos().getFights(false)); // Количество боев
			writeD(p.getPlayerInfos().getWinFights(false)); // Количество побед
			writeD(p.getPlayerInfos().getLostFights(false)); // Количество поражениев
			writeD(); // Непонятно чо
			writeD(p.getPlayerInfos().getKills(false)); // Количество убийств
			writeD(60); // Непонятно чо
			writeD(p.getPlayerInfos().getDeaths(false)); // Количество смертей
			writeD(23); // Непонятно чо
			writeD(182); // Непонятно чо
			writeD(p.getPlayerInfos().getEscapes(false)); // Количество побегов с поля боя
			// ==========================

			// СЕЗОН
			writeD(p.getPlayerInfos().getFights(true)); // Количество боев
			writeD(p.getPlayerInfos().getWinFights(true)); // Количество побед
			writeD(p.getPlayerInfos().getLostFights(true)); // Количество поражений
			writeD(); // Непонятно чо
			writeD(p.getPlayerInfos().getKills(true)); // Количество убийств
			writeD(60); // Непонятно чо
			writeD(p.getPlayerInfos().getDeaths(true)); // Количество смертей
			writeD(23); // Непонятно чо
			writeD(182); // Непонятно чо
			writeD(p.getPlayerInfos().getEscapes(true)); // Количество побегов с поля боя
			// ===== i3NetworkPacket__ReadData(a2, v113, 80); =====

			// ===== i3NetworkPacket__ReadData(a2, &v286, 20); =====
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(5)); // Скин Мужчина стандартный красные.
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(6)); // Скин Мужчина стандартный синие.
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(7)); // Шлем.
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(8)); // Берет.
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(9)); // Скин дино.
			// ===== i3NetworkPacket__ReadData(a2, &v286, 20); =====

			// ===== i3NetworkPacket__ReadData(a2, &v303, 20); ====
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(0)); // Основное оружие
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(1)); // Второстепенное оружие
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(2)); // Ближнего боя
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(3)); // Гранаты (Гранаты для взрыва)
			writeD(p.getPlayerInfos().getInventoryInfo().getEquippedItemIdByEquipedSlot(4)); // Гранаты (Гранаты специальные, смок, слеповуха)
			// ===== i3NetworkPacket__ReadData(a2, &v303, 20); =====
		}
		else
		{
			writeD( -1); // нет комнаты или плеера
		}
	}
}
